package de.fhffm.gaertnerei.tabellenModelle;
/**
 * @author Julian Schmücker
 */
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.table.AbstractTableModel;

import de.fhffm.gaertnerei.tabellen.Aussaat;
import de.fhffm.gaertnerei.tabellen.Ernte;


@SuppressWarnings("serial")
public class ErnteTableModel extends AbstractTableModel {

	private EntityManager manager = Persistence.createEntityManagerFactory("chilidatenbank").createEntityManager(); 
	private int startPosition;
	private List<Ernte> ernteListe;
	
	public ErnteTableModel(){
		this.startPosition = 0;
		this.ernteListe = getItems(startPosition, startPosition+100);
		
	}

	@Override
	public int getRowCount() {
		// gibt Zeilenanzahl als Long wert zurück
		return ((Long) manager.createQuery("SELECT COUNT(c) FROM Ernte c").getSingleResult()).intValue();
	}

	@Override
	public int getColumnCount() {
		return 7;
	}
	
    public String getColumnName(int spalte) {
        
    	switch(spalte) {
            case 0:
                return "ID";
            case 1:
            	return "Ertrag";
            case 2:
                return "Ernte Datum";
            case 3:
            	return "Genaue Reifezeit";
            case 4:
            	return "Anzahl Chilis";
            case 5:
            	return "AussaatID";
            case 6:
            	return "Pflanze";
            default:
                return "DEFAULT";
        }
    }

	@Override
	public Object getValueAt(int zeilenIndex, int spaltenIndex) {
		
		if((zeilenIndex >= startPosition) && (zeilenIndex < (startPosition+100))){
			/* Wenn die Zeile in dem vorher definierten Bereich liegt (standart ist 0-100)
			 * dann tuhe nix!
			 */
			
		}else {
			
			/*
			 * Falls die ausgewaehlte Zeile drueber liegt dan wird der Bereich neu gesetzt
			 * und die jeweiligen Items in diesem neuen bereich gehohlt
			 */
			this.ernteListe = getItems(zeilenIndex,zeilenIndex+100);
			this.startPosition = zeilenIndex;
		}
		
		Ernte ernte = ernteListe.get(zeilenIndex-startPosition);
		
		Object toReturn = null;
		
		switch(spaltenIndex){
		case 0:
			toReturn = ernte.getErnteID();
			break;
		case 1:
			toReturn = ernte.getErtrag();
			break;
		case 2:
			toReturn = ernte.getErnteDatum();
			break;
		case 3:
			toReturn = ernte.getGenaueReifezeit();
			break;	
		case 4:
			toReturn = ernte.getStueckzahl();
			break;
		case 5:
			Aussaat aussaat = ernte.getAussaat();
			toReturn = aussaat.getAussaatID();
			break;
		case 6:
			toReturn = ernte.getGeerntetepflanze();
			break;
		default:
			toReturn = ernte.getErnteID();
			
		}
		return toReturn;
	
	
	}
	
	/** 
	 * Hohlt alle Ernten in dem Angegebenen bereich aus der Tabelle
	 * und gibt diese in einer Liste zurück
	 * @param von
	 * @param bis
	 * @return Ernte Liste
	 */
	private List<Ernte> getItems(int von, int bis) {
		System.out.println("Zugriff auf die Tabelle Ernte");
		Query query = manager.createQuery("SELECT e FROM Ernte e").setMaxResults(bis-von).setFirstResult(von);
		
		List<Ernte> resultList = query.getResultList();
		return resultList;
	}
}